package src.com.client.service;

import src.com.qqcommon.MessageType;
import src.com.qqcommon.Message;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.net.Socket;

public class ClientConnectServerThread extends Thread{
    // 该线程需要持有socket
    private Socket socket;

    public ClientConnectServerThread(Socket socket) {
        this.socket = socket;
    }

    // 为了更方便的得到socket 提供get和set方法
    public Socket getSocket() {
        return socket;
    }
    public void setSocket(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        // 因为该线程需要在后台和服务器不断通信 因此采用while
        while (true) {

            try {
                System.out.println("客户端线程，等待读取从服务器发送的消息");
                ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
                Message ms = (Message) ois.readObject(); // 如果服务器没有发送Object对象 该线程就会阻塞在这里
                // 判断Message类型 然后做相应的业务处理
                // 如果得到服务器返回的在线用户列表
                if (ms.getMesType().equals(MessageType.MESSAGE_RET_ONLINE_FRIEND)) {
                    // 取出在线列表信息 并显示
                    String[] onlineUsers = ms.getContent().split(" ");
                    System.out.println("\n==================当前在线用户列表==================");
                    for (int i = 0; i < onlineUsers.length; i++) {
                        System.out.println("用户：" + onlineUsers[i]);
                    }
                } else if (ms.getMesType().equals(MessageType.MESSAGE_COMM_MES)) { // 接收私聊消息
                    System.out.println("\n" + ms.getSender() + " 对 " + ms.getGetter() + " 说 " + ms.getContent());
                } else if (ms.getMesType().equals(MessageType.MESSAGE_TO_ALL_MES)) { // 接收群发消息
                    System.out.println(ms.getSender() + " 对大家说 " + ms.getContent());
                } else if (ms.getMesType().equals(MessageType.MESSAGE_FILE_MES)) { // 接收文件
                    System.out.println(ms.getSender() + " 给 " + ms.getGetter() + " 发文件 " + ms.getSrc());

                    FileOutputStream fileOutputStream = new FileOutputStream(ms.getDes(), true);
                    fileOutputStream.write(ms.getFileBytes());
//                    fileOutputStream.flush(); // 为啥加上这句 接受的文件就为0KB ？？？？？？？？？？？？？？？？
                    fileOutputStream.close();
                    System.out.println("\n保存文件成功！");

                } else {
                    System.out.println("其他类型的MessageType暂时不处理。");
                }

            } catch (Exception e) {
                throw new RuntimeException(e);
            }


        }
    }
}
